package main

import "fmt"

//func main() {
//	//f, _ := os.Open("xxx.txt")
//	defer fmt.Println("defer test1")
//	defer fmt.Println("defer test2")
//	defer fmt.Println("defer test3")
//	/*
//		defer语句是go体用的一种用于注册延迟调用的机制,它可以让当前函数执行完毕之后执行
//		defer是堆在栈中的   先进后出
//	*/
//	fmt.Println("test2")
//}
//func main() {
//	//	defer语句执行时的拷贝机制
//	//  defer 值入栈 参数也入栈
//	//test := func() {
//	//	fmt.Println("test1")
//	//}
//	//defer test()
//	//test = func() {
//	//	fmt.Println("test2")
//	//}
//	//fmt.Println("test3")
//	x := 10
//	//defer func(a int) {
//	//	println(a)
//	//}(x)
//	//x++
//	defer func() {
//		println(x)
//	}()
//	x++
//
//}
//return 拷贝后传递   也就是值传递
func f1() int {
	x := 10
	defer func() {
		x++
	}()
	return x
}
func f2() *int {
	a := 10
	b := &a
	defer func() {
		*b++
	}()
	return b
}
func main() {
	fmt.Println(f1())
	fmt.Println(*f2())
	//	defer本质时注册了一个延时函数 defer 没有嵌套
}
